﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Zzva.Common;




namespace Zzva.Report
{
    public abstract class TReportFieldBase : IComparable 
    {

        private string mvarObozn;
        private string mvarNaim;
        private string mvarOboznFull;



        // возвращает Поле внутри дерева по полному Обозначению Report.Developer.Naim
        public virtual TReportFieldBase GetField(string pOboznFull)
        { throw (new CommonException("Метод не реализован")); }




        //Возвращает количество полей - значений
        public virtual int GetColFieldValue()
        { throw (new CommonException("Метод не реализован")); }





        //Возвращает количество уровней  поля
        public virtual int GetColLevel()
        { throw (new CommonException("Метод не реализован")); }













        protected TReportFieldBase(string pObozn, string pOboznFull, string pNaim)
        {
            mvarObozn = pObozn;
            mvarOboznFull = pOboznFull;
            mvarNaim = pNaim;
        }


        public string OboznFull
        {
            get { return mvarOboznFull; }
            set { if (mvarOboznFull != value) { throw (new CommonException("Обозначение в постояяном объекте нельзя изменять")); } }
        }








        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType()) return false;
            TReportFieldBase lReportFieldBase = (TReportFieldBase)obj;
            return (this.Obozn == lReportFieldBase.Obozn);
        }


        public override int GetHashCode()
        {return this.Obozn.GetHashCode();}




        public int CompareTo(object obj)
        {
            try
            {
                TReportFieldBase lOtherReportFieldBase = obj as TReportFieldBase;
                if (lOtherReportFieldBase != null)
                { return this.Obozn.CompareTo(lOtherReportFieldBase.Obozn); }
                else { throw (new CommonException("Object is not a TDirBase")); }
            }
            catch (Exception e1) { throw e1; }
            finally { }
        }








 



        public string Obozn
        {
            get { return mvarObozn; }
            set { if (mvarObozn != value) { throw (new CommonException("Обозначение в постояяном объекте нельзя изменять")); } }
        }







        public  string Naim
        {
            get { return mvarNaim; }
            set { mvarNaim = value; }
        }



    }
}
